<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- 数据深拷贝 -->
</head>
<body>
    <script>
//         const data = [ {
//         id:1,
//         name:'Huawei Mate50 pro',
//         price:6998
//     },{
//         id:2,
//         name:'Apple 18',
//         price:12998
//     },{
//         id:3,
//         name:'xiaomi 12',
//         price:3998
//     }]
// const dataArray = JSON.parse(JSON.stringify(data))
// dataArray[1].id = 6
// console.log(dataArray)
//JSON.stringify 是将一个 JavaScript 值转成一个 JSON 字符串(实现深拷贝方法1)



//方法二 （使用递归）
const data = [ {
        id:1,
        name:'Huawei Mate50 pro',
        price:6998
    },{
        id:2,
        name:'Apple 18',
        price:12998
    },{
        id:3,
        name:'xiaomi 12',
        price:3998
    }]
    function copy(data) {
       let newobj = null;   //声明一个变量用来储存拷贝之后的内容
        //判断数据类型是否是复杂类型，如果是则调用自己，再次循环，如果不是，直接赋值即可，
        //由于null不可以循环但类型又是object，所以这个需要对null进行判断
        if (typeof (data) == 'object' && data !== null) {
            //声明一个变量用以储存拷贝出来的值,根据参数的具体数据类型声明不同的类型来储存
            newobj = data instanceof Array ? [] : {};
        for (var i in data) {
        newobj[i] = copy(data[i])
    }
    } else {
    newobj = data
    }
    return newobj;
    }
const data2 = copy(data)
data2[1].name = '修改'
data2[2].id = 1000
console.log(data, data2)
    </script>
</body>
</html>